﻿using System;
using System.Data;
using System.Linq;
using System.Web;

namespace Job.Core.Data
{
    /// <summary>
    /// 提供 Web 应用程序中数据库连接上下文处理(无法继承此类)。
    /// 如果是 Web 应用程序且使用 DbHelper 类用于数据交互处理，请在 web.config 中的 httpModules 节中注册此 Module。
    /// </summary>
    public sealed class DataContextModule : IHttpModule
    {
        #region IHttpModule 成员

        public void Dispose()
        {
            
        }

        public void Init(HttpApplication context)
        {
            DbHelper.ContinuedConnection = true;
            context.EndRequest += new EventHandler(context_EndRequest);
        }

        void context_EndRequest(object sender, EventArgs e)
        {
            HttpContext context = ((HttpApplication)sender).Context;
            foreach (var key in context.Items.Keys)
            {
                if (key.ToString().StartsWith(DbHelper.ContextKeyPrefix))
                {
                    IDbConnection conn = context.Items[key] as IDbConnection;

                    if (conn != null)
                    {
                        if (conn.State != ConnectionState.Closed)
                            conn.Close();

                        conn.Dispose();
                    }
                }
            } 
        }     

        #endregion
    }
}
